#pragma once
#ifndef MBDTreeNode_h
#define MBDTreeNode_h

#include <string>
#include <vector>
#include <memory>

// 数据类型
enum ValueType {
  STRING_TYPE,   // 字符串类型
  BOUNDARY_TYPE, // 边界类型
  GEOMSET_TYPE   // 几何图形集
};

struct TreeNode {
  TreeNode() = default;
  ~TreeNode() = default; // 智能指针会自动管理内存
  std::string nodeName;  // fiblam, fibply,
  std::string key;
  std::string value;
  ValueType valueType;
  std::vector<std::unique_ptr<TreeNode>> childNodes; // 子节点

  TreeNode *addChild(const std::string &childName, const std::string &value) {
    auto child = std::make_unique<TreeNode>();
    child->key = std::move(childName);
    child->value = value;
    auto *childPtr = child.get();
    childNodes.push_back(std::move(child));
    return childPtr;
  }
};

using TreeNodePtr = std::unique_ptr<TreeNode>;
#endif